package org.eliza.base.basicx.datatypex

import java.util.*
import kotlin.random.Random


//编码其他字符要用 Unicode 转义序列语法：'\uFF00'
private fun basic() {
    //字符串是不可变的。 一旦初始化了一个字符串，就不能改变它的值或者给它赋新值。 所有转换字符串的操作都以一个新的 String 对象来返回结果，而保持原始字符串不变
    val aChar: String = "abcd\t"
    val bChar: String = """abcd\t"""
    val cChar: String = """abc
        |d
        |\t""".trimMargin()//trimMargin() 删除多余的空白。
//    默认 | 用作边界前缀，但你可以选择其他字符并作为参数传入
}

private fun join() {
    println("=====metjionhod=====")
    val aChar: String = "abcd"
//    只要表达式中的第一个元素是字符串
    println("aaa" + 1)
//    println(1+"aaa" ) //err
}

private fun eq() {
    println("--------字符串比较--------")
    var str1 = "Jason"
    var str2 = "Jason"
    var str3 = "jason".replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }
    println("value ${str1 == str2},p ${str1 === str2}  hashcode ${str1.hashCode()}:${str2.hashCode()}") // true true
    println("value ${str1 == str3},p ${str1 === str3}  hashcode ${str1.hashCode()}:${str3.hashCode()}") // true false

    //   字符串-- > 常量池-- > 不可变-- > 相同内容直接引用
}

private fun method() {
    println("=====method=====")
    val aChar: String = "abcdefg"
    println("str.plus a                   :${aChar.plus("a")}")
    println("str.get 0                    :${aChar.get(0)}")
    println("str.subSequence 0..2         :${aChar.subSequence(0..2)}")
    println("str.compareTo a              :${aChar.compareTo("a")}")
    println("str.equals a                 :${aChar.equals("a")}")
    println("str.equals a                 :${aChar.length}")
    println("str.rangeUntil a             :${aChar.rangeUntil("abcdefg")}")
    println("str.rangeUntil a             :${aChar.rangeUntil("a")}")
    println("str.rangeTo a                :${aChar.rangeTo("a")}")
    println("str.codePointCount a         :${aChar.codePointCount(1, aChar.length)}")

    println("str.random a                 :${aChar.random()}")
    println("str.randomOrNull a           :${aChar.randomOrNull(Random.Default)}")
    println("str.toCharArray            :${aChar.toCharArray()}")
    println("str.toCharArray 0..3           :${aChar.toCharArray(0, 3).joinToString()}")
    println(
        "str.toCharArray a           :${
            aChar.toCharArray(CharArray(aChar.length), 0, 1, aChar.length).joinToString()
        }"
    )
    println(
        "str.replace a           :${
            aChar.replace("a", "s")
        }"
    )
    aChar.replace(Regex("[^a-zA-Z0-9]")) {
        when (it.value) {
            "a" -> "88"
            "J" -> "JJ"
            "B" -> "BB"
            "K" -> "KK"
            "S" -> "SS"
            else -> it.value
        }
    }

}

private  fun main() {

    eq()
    method()
}